package name.zxw.datastructures.sort;

import java.util.Arrays;

/**
 * @author ZhangXinWang
 * @date 2023/5/25 0:10
 */
public class BubbleSort {

    public static void main(String[] args) {
        //从小到大排序
//        int arr[] = {-1, 2, -3, 4, -5};
        System.out.println(Integer.MAX_VALUE);
        int[] arr = new int[80000];
        for (int i = 0; i < 80000; i++) {
            arr[i] = (int) (Math.random() * 80000);
        }
        long startTime = System.currentTimeMillis();
        bubbleSort(arr);
        long endTime = System.currentTimeMillis();
        System.out.println("(endTime-startTime) = " + (endTime - startTime));
//        System.out.println(Arrays.toString(arr));
    }

    /**
     * 从小到大进行冒泡排序
     *
     * @param arr 待排序数组
     */
    public static void bubbleSort(int[] arr) {
        //记录时间频度
        int count = 0;
        //辅助交换的变量
        int temp = 0;
        //是否提前结束
        boolean flag = true;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1; j++) {
                count++;
                //逆序,前面的大于后面的
                if (arr[j] > arr[j + 1]) {
                    //这一趟冒泡如果进行了交换,则不提前结束
                    flag = false;
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            //如果这一趟排序没有进行任何交换,则意味着着这个数组已经排序好了,后面无需再进行冒泡循环
            if (flag) {
                break;
            }
            flag = true;
        }
        System.out.println("count = " + count);
    }


}
